glitter makes SPARQLglitter, un package R pour explorer et collecter des données du web sémantique
Rencontres R 2023, Avignon
2024-09-06
Appel à projet de l’ENS de Lyon “Projets émergents” => 💰 20 000 euros sur 3 ans
© Camille Scheffler
exemple: URI correspondant au film “Marius et Jeannette” sur Wikidata
🎯 Promouvoir l’usage (exploration, recueil, analyse) des données du web sémantique pour les chercheur·se·s et étudiant·e·s usagers de R, en:
En tant que “Domain Specific Language” (DSL), glitter correspond à une syntaxe et des fonctions plus proches du tidyverse et base R que de SPARQL.
|
|
|
Dans R, sans glitter: Dans R, avec glitter: |
|
Combien de films dans Wikidata:
| n_films |
|---|
| 284098 |
lf_2=spq_init() %>% # Initialise requête puis
spq_add("?film wdt:P31 wd:Q11424", # Ajoute motif "?film est une instance de film"
.label="?film") %>% # ... étiquette ?film puis
spq_add("?film wdt:P840 ?loc", # Ajoute motif "?film a pour localisation narrative ?loc
.label="?loc") %>% # ... étiquette ?loc puis
spq_add("?loc wdt:P625 ?coords") %>% # Ajoute les coordonnées de ?loc puis
spq_add("?film wdt:P3383 ?image") %>% # Ajoute l'affiche du film
spq_add("?film wdt:P921 ?subject", # Ajoute ?subject
.label="?subject", # et l'étiquette associée
.required=FALSE) %>% # si dispo
spq_add("?film wdt:P577 ?date") %>% # Ajoute ?date (la date de sortie) puis
spq_mutate(year=year(date)) %>% # Ajoute variable year qui correspond à l'année de ?date puis
spq_select(-date) %>% # Retire date des variables renvoyées
spq_language("fr,en") %>% # Etiquette quand demandé de préférence en français, à défaut en anglais puis
spq_perform() # Envoie la requêteCette table comprend 2428 lignes (films avec localisation narrative, coordonnées associées et affiche). Voici les premières:
| filmLabel | locLabel | coords | image | subjectLabel | year |
|---|---|---|---|---|---|
| Une femme cherche son destin | Rio de Janeiro | Point(-43.205555555 -22.911111111) | http://commons.wikimedia.org/wiki/Special:FilePath/Now%2C%20Voyager%20%281942%20poster%29.jpg | NA | 1942 |
| La Fièvre dans le sang | Kansas | Point(-98.0 38.5) | http://commons.wikimedia.org/wiki/Special:FilePath/Splendor%20Sheet%20A.jpg | NA | 1961 |
| La Fièvre dans le sang | Kansas | Point(-98.0 38.5) | http://commons.wikimedia.org/wiki/Special:FilePath/Splendor%20Sheet%20A.jpg | NA | 1962 |
| La Fièvre dans le sang | Kansas | Point(-98.0 38.5) | http://commons.wikimedia.org/wiki/Special:FilePath/Splendor%20Sheet%20A.jpg | NA | 1964 |
| La Foire aux illusions | Iowa | Point(-93.0 42.0) | http://commons.wikimedia.org/wiki/Special:FilePath/State%20Fair%20%281933%20film%20poster%29%20-%20Restoration.jpg | NA | 1933 |
| Viva Villa ! | Mexique | Point(-102.0 23.0) | http://commons.wikimedia.org/wiki/Special:FilePath/Viva%20Villa%20poster.jpg | Révolution mexicaine | 1934 |
Un package qui suit quelques principes du tidyverse…
spq_)|
Fonctions de base:
|
=> “Where the magic is” (Maëlle) |
Exemple de requête sur le SPARQL endpoint de dbpedia:
tib <- spq_init() %>%
spq_add("?person dbo:birthPlace ?place") %>% # ?personne est née à ?place
spq_add("?person dbo:profession ?job") %>% # ?personne a pour profession ?job
spq_add("?job rdfs:label ?jobLabel") %>% # ?job a pour étiquette ?jobLabel
spq_filter(lang(jobLabel)=="en") %>% # Filtre pour ne garder que les étiquettes en anglais
spq_add("?place rdfs:label 'Lyon'@en") %>% # ?place a pour étiquette 'Lyon' (en anglais)
spq_head(10) %>%
spq_perform("dbpedia") # Envoie sur le SPARQL endpoint de DBPEDIA| person | place | job | jobLabel |
|---|---|---|---|
| http://dbpedia.org/resource/Walter_Pilliet | http://dbpedia.org/resource/Lyon | http://dbpedia.org/resource/Resident_magistrate | Resident magistrate |
| http://dbpedia.org/resource/Stefan_Meller | http://dbpedia.org/resource/Lyon | http://dbpedia.org/resource/Academician | Academician |
| http://dbpedia.org/resource/André_Potocki | http://dbpedia.org/resource/Lyon | http://dbpedia.org/resource/Lawyer | Lawyer |
| http://dbpedia.org/resource/François-Noël_Buffet | http://dbpedia.org/resource/Lyon | http://dbpedia.org/resource/Lawyer | Lawyer |
| http://dbpedia.org/resource/Bernard_Cerquiglini | http://dbpedia.org/resource/Lyon | http://dbpedia.org/resource/Linguist | Linguist |
| http://dbpedia.org/resource/Nora_Berra | http://dbpedia.org/resource/Lyon | http://dbpedia.org/resource/Physician | Physician |
| http://dbpedia.org/resource/Bernard_Accoyer | http://dbpedia.org/resource/Lyon | http://dbpedia.org/resource/Physician | Physician |
| http://dbpedia.org/resource/Jean-François_Mattei | http://dbpedia.org/resource/Lyon | http://dbpedia.org/resource/Physician | Physician |
| http://dbpedia.org/resource/Delphine_Bagarry | http://dbpedia.org/resource/Lyon | http://dbpedia.org/resource/Physician | Physician |
Exemples pratiques d’utilisation:
=> Richesse thématique pour (par exemple) la construction de jeux de données pédagogiques
Chantier en cours!
📣 Retours utilisateurs bienvenus
Package installable et modifiable ici https://github.com/lvaudor/glitter.
🧠 Cas d’usages: à vous de jouer!
🙏 Merci pour votre attention!